﻿using SharpArch.Core.DomainModel;
using SharpArch.Core.PersistenceSupport;
using NHibernate.Validator.Constraints;
using SharpArch.Core;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
using System.Collections.Generic;

namespace zeus.Core
{
    public class Grupo : Entity
    {

        public Grupo()
        {
            GrupoUnidades = new List<GrupoUnidad>();
            GrupoUsuarios = new List<GrupoUsuario>();
        }
            
        [Required(ErrorMessage = "Ingrese  Nombre")]
        [DisplayName("Nombre")]
        public virtual string Nombre { get; set; }

        [DisplayName("Compartir perímetros")]
        public virtual bool Perimetro { get; set; }

        [DisplayName("Compartir rutas")]
        public virtual bool Ruta { get; set; }

        [DisplayName("Compartir eventos")]
        public virtual bool Evento { get; set; }

        public virtual Cliente Cliente { get; set; }

        public virtual int CodigoCliente { get; set; }

        public virtual string FechaCreacion { get; set; }

        //public virtual Cliente Cliente { get; set; }

        public virtual IList<GrupoUnidad> GrupoUnidades { get; set; }

        public virtual IList<GrupoUsuario> GrupoUsuarios { get; set; }



        // Helpers
        public virtual string UsuariosHidden { get; set; }
        public virtual string UnidadesHidden { get; set; }

        public virtual void AddUsuario(GrupoUsuario grupoUsuario)
        {
            if (grupoUsuario.Grupo != null)
                grupoUsuario.Grupo.GrupoUsuarios.Remove(grupoUsuario);

            grupoUsuario.Grupo = this;
            GrupoUsuarios.Add(grupoUsuario);
        }

        public virtual void AddUnidad(GrupoUnidad grupoUnidad)
        {
            if (grupoUnidad.Grupo != null)
                grupoUnidad.Grupo.GrupoUnidades.Remove(grupoUnidad);

            grupoUnidad.Grupo = this;
            GrupoUnidades.Add(grupoUnidad);
        }

    }
}
